# utils/logger.py
import logging
import os
import datetime


def get_local_time():
    """获取当前本地时间字符串，格式：YYYY-MM-DD_HH-MM-SS"""
    return datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')


def create_log_id(dir_path):
    """
    在指定的目录下创建唯一的日志文件ID。
    如果目录不存在则创建，并查找下一个可用的ID。
    Args:
        dir_path (str): 日志文件所在的目录。
    Returns:
        int: 可用的日志ID。
    """
    log_count = 0
    file_path = os.path.join(dir_path, f'log_{log_count}.log')
    while os.path.exists(file_path):
        log_count += 1
        file_path = os.path.join(dir_path, f'log_{log_count}.log')
    return log_count


def logging_config(folder=None, name=None,
                   level=logging.INFO,
                   console_level=logging.INFO,
                   no_console=False):
    """
    配置日志记录器，包括文件日志和控制台日志。
    Args:
        folder (str): 日志文件保存的目录。
        name (str): 日志文件的基本名称。
        level (int): 文件日志级别。
        console_level (int): 控制台日志级别。
        no_console (bool): 是否禁用控制台输出。
    """
    if not os.path.exists(folder):
        os.makedirs(folder)

    # 清除已有的 handlers，防止重复添加
    for handler in logging.root.handlers[:]:
        logging.root.removeHandler(handler)

    logpath = os.path.join(folder, f"{name}.log")
    print(f"All logs will be saved to {logpath}")

    logging.root.setLevel(level)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    # 文件日志 handler
    logfile = logging.FileHandler(logpath, encoding='utf-8')
    logfile.setLevel(level)
    logfile.setFormatter(formatter)
    logging.root.addHandler(logfile)

    # 控制台日志 handler
    if not no_console:
        logconsole = logging.StreamHandler()
        logconsole.setLevel(console_level)
        logconsole.setFormatter(formatter)
        logging.root.addHandler(logconsole)

    return folder